package com.dataStructure.queue;

import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;

//定义一个消息类，实现Delayed接口
class Message implements Delayed {
    //消息内容
    private String content;
    //发送时间
    private long sendTime;

    public Message(String content, long sendTime) {
        this.content = content;
        this.sendTime = sendTime;
    }

    public String getContent() {
        return content;
    }

    //返回剩余的延迟时间
    @Override
    public long getDelay(TimeUnit unit) {
        return unit.convert(sendTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
    }

    //按照剩余的延迟时间排序
    @Override
    public int compareTo(Delayed o) {
        return (int) (this.getDelay(TimeUnit.MILLISECONDS) - o.getDelay(TimeUnit.MILLISECONDS));
    }
}

public class DelayQueueDemo {

    public static void main(String[] args) throws InterruptedException {
        //创建一个延迟队列
        DelayQueue<Message> delayQueue = new DelayQueue<>();

        //创建一个消息，内容为"Hello"，发送时间为当前时间加上1小时（单位为毫秒）
        Message message = new Message("Hello", System.currentTimeMillis() + 4320000L * 1000);

        //将消息放入延迟队列中
        delayQueue.put(message);

        //从延迟队列中取出消息，如果没有到达发送时间，则会阻塞等待
        System.out.println(delayQueue.size());
        Message msg = delayQueue.take();

        //打印消息内容和当前时间（单位为毫秒）
        System.out.println(msg.getContent());
        System.out.println(System.currentTimeMillis());

    }
}